home *** CD-ROM | disk | FTP | other *** search
Text File | 2007-02-17 | 27.4 KB | 1,505 lines |
- /*
- _____________________________________________________________________________
-
- Text Functions Header v2.4
- _____________________________________________________________________________
-
- 2006 Shengalts Aleksander aka Instructor (Shengalts@mail.ru)
-
- See documentation for more information about the following functions.
-
- Usage in script:
- 1. !include "TextFunc.nsh"
- 2. !insertmacro TextFunction
- 3. [Section|Function]
- ${TextFunction} "File" "..." $var
- [SectionEnd|FunctionEnd]
-
-
- TextFunction=[LineFind|LineRead|FileReadFromEnd|LineSum|FileJoin|
- TextCompare|TextCompareS|ConfigRead|ConfigReadS|
- ConfigWrite|ConfigWriteS|FileRecode|TrimNewLines]
-
- un.TextFunction=[un.LineFind|un.LineRead|un.FileReadFromEnd|un.LineSum|
- un.FileJoin|un.TextCompare|un.TextCompareS|un.ConfigRead|
- un.ConfigReadS|un.ConfigWrite|un.ConfigWriteS|un.FileRecode|
- un.TrimNewLines]
-
- _____________________________________________________________________________
-
- Thanks to:
- _____________________________________________________________________________
-
- LineRead
- Afrow UK (Based on his idea of Function "ReadFileLine")
- LineSum
- Afrow UK (Based on his idea of Function "LineCount")
- FileJoin
- Afrow UK (Based on his idea of Function "JoinFiles")
- ConfigRead
- vbgunz (His idea)
- ConfigWrite
- vbgunz (His idea)
- TrimNewLines
- sunjammer (Based on his Function "TrimNewLines")
- */
-
-
- ;_____________________________________________________________________________
- ;
- ; Macros
- ;_____________________________________________________________________________
- ;
- ; Change log window verbosity (default: 3=no script)
- ;
- ; Example:
- ; !include "TextFunc.nsh"
- ; !insertmacro LineFind
- ; ${TEXTFUNC_VERBOSE} 4 # all verbosity
- ; !insertmacro LineSum
- ; ${TEXTFUNC_VERBOSE} 3 # no script
-
- !ifndef TEXTFUNC_INCLUDED
- !define TEXTFUNC_INCLUDED
-
- !include FileFunc.nsh
-
- !verbose push
- !verbose 3
- !ifndef _TEXTFUNC_VERBOSE
- !define _TEXTFUNC_VERBOSE 3
- !endif
- !verbose ${_TEXTFUNC_VERBOSE}
- !define TEXTFUNC_VERBOSE `!insertmacro TEXTFUNC_VERBOSE`
- !define _TEXTFUNC_UN
- !define _TEXTFUNC_S
- !verbose pop
-
- !macro TEXTFUNC_VERBOSE _VERBOSE
- !verbose push
- !verbose 3
- !undef _TEXTFUNC_VERBOSE
- !define _TEXTFUNC_VERBOSE ${_VERBOSE}
- !verbose pop
- !macroend
-
-
- # Install. Case insensitive. #
-
- !macro LineFindCall _INPUT _OUTPUT _RANGE _FUNC
- !verbose push
- !verbose ${_TEXTFUNC_VERBOSE}
- Push $0
- Push `${_INPUT}`
- Push `${_OUTPUT}`
- Push `${_RANGE}`
- GetFunctionAddress $0 `${_FUNC}`
- Push `$0`
- Call LineFind
- Pop $0
- !verbose pop
- !macroend
-
- !macro LineReadCall _FILE _NUMBER _RESULT
- !verbose push
- !verbose ${_TEXTFUNC_VERBOSE}
- Push `${_FILE}`
- Push `${_NUMBER}`
- Call LineRead
- Pop ${_RESULT}
- !verbose pop
- !macroend
-
- !macro FileReadFromEndCall _FILE _FUNC
- !verbose push
- !verbose ${_TEXTFUNC_VERBOSE}
- Push $0
- Push `${_FILE}`
- GetFunctionAddress $0 `${_FUNC}`
- Push `$0`
- Call FileReadFromEnd
- Pop $0
- !verbose pop
- !macroend
-
- !macro LineSumCall _FILE _RESULT
- !verbose push
- !verbose ${_TEXTFUNC_VERBOSE}
- Push `${_FILE}`
- Call LineSum
- Pop ${_RESULT}
- !verbose pop
- !macroend
-
- !macro FileJoinCall _FILE1 _FILE2 _FILE3
- !verbose push
- !verbose ${_TEXTFUNC_VERBOSE}
- Push `${_FILE1}`
- Push `${_FILE2}`
- Push `${_FILE3}`
- Call FileJoin
- !verbose pop
- !macroend
-
- !macro TextCompareCall _FILE1 _FILE2 _OPTION _FUNC
- !verbose push
- !verbose ${_TEXTFUNC_VERBOSE}
- Push $0
- Push `${_FILE1}`
- Push `${_FILE2}`
- Push `${_OPTION}`
- GetFunctionAddress $0 `${_FUNC}`
- Push `$0`
- Call TextCompare
- Pop $0
- !verbose pop
- !macroend
-
- !macro ConfigReadCall _FILE _ENTRY _RESULT
- !verbose push
- !verbose ${_TEXTFUNC_VERBOSE}
- Push `${_FILE}`
- Push `${_ENTRY}`
- Call ConfigRead
- Pop ${_RESULT}
- !verbose pop
- !macroend
-
- !macro ConfigWriteCall _FILE _ENTRY _VALUE _RESULT
- !verbose push
- !verbose ${_TEXTFUNC_VERBOSE}
- Push `${_FILE}`
- Push `${_ENTRY}`
- Push `${_VALUE}`
- Call ConfigWrite
- Pop ${_RESULT}
- !verbose pop
- !macroend
-
- !macro FileRecodeCall _FILE _FORMAT
- !verbose push
- !verbose ${_TEXTFUNC_VERBOSE}
- Push `${_FILE}`
- Push `${_FORMAT}`
- Call FileRecode
- !verbose pop
- !macroend
-
- !macro TrimNewLinesCall _FILE _RESULT
- !verbose push
- !verbose ${_TEXTFUNC_VERBOSE}
- Push `${_FILE}`
- Call TrimNewLines
- Pop ${_RESULT}
- !verbose pop
- !macroend
-
- !macro _TextFunc_TempFileForFile _FILE _RESULT
- ${${_TEXTFUNC_UN}GetParent} ${_FILE} ${_RESULT}
- StrCmp ${_RESULT} "" 0 +2
- StrCpy ${_RESULT} $EXEDIR
- GetTempFileName ${_RESULT} ${_RESULT}
- StrCmp ${_RESULT} "" 0 +2
- GetTempFileName ${_RESULT}
- ClearErrors
- !macroend
-
- !macro LineFind
- !ifndef ${_TEXTFUNC_UN}LineFind
- !verbose push
- !verbose ${_TEXTFUNC_VERBOSE}
- !define ${_TEXTFUNC_UN}LineFind `!insertmacro ${_TEXTFUNC_UN}LineFindCall`
-
- !insertmacro ${_TEXTFUNC_UN}GetParent
-
- Function ${_TEXTFUNC_UN}LineFind
- Exch $3
- Exch
- Exch $2
- Exch
- Exch 2
- Exch $1
- Exch 2
- Exch 3
- Exch $0
- Exch 3
- Push $4
- Push $5
- Push $6
- Push $7
- Push $8
- Push $9
- Push $R4
- Push $R5
- Push $R6
- Push $R7
- Push $R8
- Push $R9
- ClearErrors
-
- IfFileExists '$0' 0 error
- StrCmp $1 '/NUL' begin
- StrCpy $8 0
- IntOp $8 $8 - 1
- StrCpy $9 $1 1 $8
- StrCmp $9 \ +2
- StrCmp $9 '' +3 -3
- StrCpy $9 $1 $8
- IfFileExists '$9\*.*' 0 error
-
- begin:
- StrCpy $4 1
- StrCpy $5 -1
- StrCpy $6 0
- StrCpy $7 0
- StrCpy $R4 ''
- StrCpy $R6 ''
- StrCpy $R7 ''
- StrCpy $R8 0
-
- StrCpy $8 $2 1
- StrCmp $8 '{' 0 delspaces
- StrCpy $2 $2 '' 1
- StrCpy $8 $2 1 -1
- StrCmp $8 '}' 0 delspaces
- StrCpy $2 $2 -1
- StrCpy $R6 cut
-
- delspaces:
- StrCpy $8 $2 1
- StrCmp $8 ' ' 0 +3
- StrCpy $2 $2 '' 1
- goto -3
- StrCmp $2$7 '0' file
- StrCpy $4 ''
- StrCpy $5 ''
- StrCmp $2 '' writechk
-
- range:
- StrCpy $8 0
- StrCpy $9 $2 1 $8
- StrCmp $9 '' +5
- StrCmp $9 ' ' +4
- StrCmp $9 ':' +3
- IntOp $8 $8 + 1
- goto -5
- StrCpy $5 $2 $8
- IntOp $5 $5 + 0
- IntOp $8 $8 + 1
- StrCpy $2 $2 '' $8
- StrCmp $4 '' 0 +2
- StrCpy $4 $5
- StrCmp $9 ':' range
-
- IntCmp $4 0 0 +2
- IntCmp $5 -1 goto 0 growthcmp
- StrCmp $R7 '' 0 minus2plus
- StrCpy $R7 0
- FileOpen $8 $0 r
- FileRead $8 $9
- IfErrors +3
- IntOp $R7 $R7 + 1
- Goto -3
- FileClose $8
-
- minus2plus:
- IntCmp $4 0 +5 0 +5
- IntOp $4 $R7 + $4
- IntOp $4 $4 + 1
- IntCmp $4 0 +2 0 +2
- StrCpy $4 0
- IntCmp $5 -1 goto 0 growthcmp
- IntOp $5 $R7 + $5
- IntOp $5 $5 + 1
- growthcmp:
- IntCmp $4 $5 goto goto
- StrCpy $5 $4
- goto:
- goto $7
-
- file:
- StrCmp $1 '/NUL' notemp
- !insertmacro _TextFunc_TempFileForFile $1 $R4
- Push $R4
- FileOpen $R4 $R4 w
- notemp:
- FileOpen $R5 $0 r
- IfErrors preerror
-
- loop:
- IntOp $R8 $R8 + 1
- FileRead $R5 $R9
- IfErrors handleclose
-
- cmp:
- StrCmp $2$4$5 '' writechk
- IntCmp $4 $R8 call 0 writechk
- StrCmp $5 -1 call
- IntCmp $5 $R8 call 0 call
-
- GetLabelAddress $7 cmp
- goto delspaces
-
- call:
- StrCpy $7 $R9
- Push $0
- Push $1
- Push $2
- Push $3
- Push $4
- Push $5
- Push $6
- Push $7
- Push $R4
- Push $R5
- Push $R6
- Push $R7
- Push $R8
- StrCpy $R6 '$4:$5'
- StrCmp $R7 '' +3
- IntOp $R7 $R8 - $R7
- IntOp $R7 $R7 - 1
- Call $3
- Pop $9
- Pop $R8
- Pop $R7
- Pop $R6
- Pop $R5
- Pop $R4
- Pop $7
- Pop $6
- Pop $5
- Pop $4
- Pop $3
- Pop $2
- Pop $1
- Pop $0
- IfErrors preerror
- StrCmp $9 'StopLineFind' 0 +3
- IntOp $6 $6 + 1
- goto handleclose
- StrCmp $1 '/NUL' loop
- StrCmp $9 'SkipWrite' 0 +3
- IntOp $6 $6 + 1
- goto loop
- StrCmp $7 $R9 write
- IntOp $6 $6 + 1
- goto write
-
- writechk:
- StrCmp $1 '/NUL' loop
- StrCmp $R6 cut 0 write
- IntOp $6 $6 + 1
- goto loop
-
- write:
- FileWrite $R4 $R9
- goto loop
-
- preerror:
- SetErrors
-
- handleclose:
- StrCmp $1 '/NUL' +3
- FileClose $R4
- Pop $R4
- FileClose $R5
- IfErrors error
-
- StrCmp $1 '/NUL' end
- StrCmp $1 '' 0 +2
- StrCpy $1 $0
- StrCmp $6 0 0 rename
- FileOpen $7 $0 r
- FileSeek $7 0 END $8
- FileClose $7
- FileOpen $7 $R4 r
- FileSeek $7 0 END $9
- FileClose $7
- IntCmp $8 $9 0 rename
- Delete $R4
- StrCmp $1 $0 end
- CopyFiles /SILENT $0 $1
- goto end
-
- rename:
- Delete '$EXEDIR\$1'
- Rename $R4 '$EXEDIR\$1'
- IfErrors 0 end
- Delete $1
- Rename $R4 $1
- IfErrors 0 end
-
- error:
- SetErrors
-
- end:
- Pop $R9
- Pop $R8
- Pop $R7
- Pop $R6
- Pop $R5
- Pop $R4
- Pop $9
- Pop $8
- Pop $7
- Pop $6
- Pop $5
- Pop $4
- Pop $3
- Pop $2
- Pop $1
- Pop $0
- FunctionEnd
-
- !verbose pop
- !endif
- !macroend
-
- !macro LineRead
- !ifndef ${_TEXTFUNC_UN}LineRead
- !verbose push
- !verbose ${_TEXTFUNC_VERBOSE}
- !define ${_TEXTFUNC_UN}LineRead `!insertmacro ${_TEXTFUNC_UN}LineReadCall`
-
- Function ${_TEXTFUNC_UN}LineRead
- Exch $1
- Exch
- Exch $0
- Exch
- Push $2
- Push $3
- Push $4
- ClearErrors
-
- IfFileExists $0 0 error
- IntOp $1 $1 + 0
- IntCmp $1 0 error 0 plus
- StrCpy $4 0
- FileOpen $2 $0 r
- IfErrors error
- FileRead $2 $3
- IfErrors +3
- IntOp $4 $4 + 1
- Goto -3
- FileClose $2
- IntOp $1 $4 + $1
- IntOp $1 $1 + 1
- IntCmp $1 0 error error
-
- plus:
- FileOpen $2 $0 r
- IfErrors error
- StrCpy $3 0
- IntOp $3 $3 + 1
- FileRead $2 $0
- IfErrors +4
- StrCmp $3 $1 0 -3
- FileClose $2
- goto end
- FileClose $2
-
- error:
- SetErrors
- StrCpy $0 ''
-
- end:
- Pop $4
- Pop $3
- Pop $2
- Pop $1
- Exch $0
- FunctionEnd
-
- !verbose pop
- !endif
- !macroend
-
- !macro FileReadFromEnd
- !ifndef ${_TEXTFUNC_UN}FileReadFromEnd
- !verbose push
- !verbose ${_TEXTFUNC_VERBOSE}
- !define ${_TEXTFUNC_UN}FileReadFromEnd `!insertmacro ${_TEXTFUNC_UN}FileReadFromEndCall`
-
- Function ${_TEXTFUNC_UN}FileReadFromEnd
- Exch $1
- Exch
- Exch $0
- Exch
- Push $7
- Push $8
- Push $9
- ClearErrors
-
- StrCpy $7 -1
- StrCpy $8 0
- IfFileExists $0 0 error
- FileOpen $0 $0 r
- IfErrors error
- FileRead $0 $9
- IfErrors +4
- Push $9
- IntOp $8 $8 + 1
- goto -4
- FileClose $0
-
- nextline:
- StrCmp $8 0 end
- Pop $9
- Push $1
- Push $7
- Push $8
- Call $1
- Pop $0
- Pop $8
- Pop $7
- Pop $1
- IntOp $7 $7 - 1
- IntOp $8 $8 - 1
- IfErrors error
- StrCmp $0 'StopFileReadFromEnd' clearstack nextline
-
- error:
- SetErrors
-
- clearstack:
- StrCmp $8 0 end
- Pop $9
- IntOp $8 $8 - 1
- goto clearstack
-
- end:
- Pop $9
- Pop $8
- Pop $7
- Pop $1
- Pop $0
- FunctionEnd
-
- !verbose pop
- !endif
- !macroend
-
- !macro LineSum
- !ifndef ${_TEXTFUNC_UN}LineSum
- !verbose push
- !verbose ${_TEXTFUNC_VERBOSE}
- !define ${_TEXTFUNC_UN}LineSum `!insertmacro ${_TEXTFUNC_UN}LineSumCall`
-
- Function ${_TEXTFUNC_UN}LineSum
- Exch $0
- Push $1
- Push $2
- ClearErrors
-
- IfFileExists $0 0 error
- StrCpy $2 0
- FileOpen $0 $0 r
- IfErrors error
- FileRead $0 $1
- IfErrors +3
- IntOp $2 $2 + 1
- Goto -3
- FileClose $0
- StrCpy $0 $2
- goto end
-
- error:
- SetErrors
- StrCpy $0 ''
-
- end:
- Pop $2
- Pop $1
- Exch $0
- FunctionEnd
-
- !verbose pop
- !endif
- !macroend
-
- !macro FileJoin
- !ifndef ${_TEXTFUNC_UN}FileJoin
- !verbose push
- !verbose ${_TEXTFUNC_VERBOSE}
- !define ${_TEXTFUNC_UN}FileJoin `!insertmacro ${_TEXTFUNC_UN}FileJoinCall`
-
- !insertmacro ${_TEXTFUNC_UN}GetParent
-
- Function ${_TEXTFUNC_UN}FileJoin
- Exch $2
- Exch
- Exch $1
- Exch
- Exch 2
- Exch $0
- Exch 2
- Push $3
- Push $4
- Push $5
- ClearErrors
-
- IfFileExists $0 0 error
- IfFileExists $1 0 error
- StrCpy $3 0
- IntOp $3 $3 - 1
- StrCpy $4 $2 1 $3
- StrCmp $4 \ +2
- StrCmp $4 '' +3 -3
- StrCpy $4 $2 $3
- IfFileExists '$4\*.*' 0 error
-
- StrCmp $2 $0 0 +2
- StrCpy $2 ''
- StrCmp $2 '' 0 +3
- StrCpy $4 $0
- Goto notemp
- !insertmacro _TextFunc_TempFileForFile $2 $4
- CopyFiles /SILENT $0 $4
- notemp:
- FileOpen $3 $4 a
- IfErrors error
- FileSeek $3 -1 END
- FileRead $3 $5
- StrCmp $5 '$\r' +3
- StrCmp $5 '$\n' +2
- FileWrite $3 '$\r$\n'
-
- ;FileWrite $3 '$\r$\n--Divider--$\r$\n'
-
- FileOpen $0 $1 r
- IfErrors error
- FileRead $0 $5
- IfErrors +3
- FileWrite $3 $5
- goto -3
- FileClose $0
- FileClose $3
- StrCmp $2 '' end
- Delete '$EXEDIR\$2'
- Rename $4 '$EXEDIR\$2'
- IfErrors 0 end
- Delete $2
- Rename $4 $2
- IfErrors 0 end
-
- error:
- SetErrors
-
- end:
- Pop $5
- Pop $4
- Pop $3
- Pop $2
- Pop $1
- Pop $0
- FunctionEnd
-
- !verbose pop
- !endif
- !macroend
-
- !macro TextCompare
- !ifndef ${_TEXTFUNC_UN}TextCompare${_TEXTFUNC_S}
- !verbose push
- !verbose ${_TEXTFUNC_VERBOSE}
- !define ${_TEXTFUNC_UN}TextCompare${_TEXTFUNC_S} `!insertmacro ${_TEXTFUNC_UN}TextCompare${_TEXTFUNC_S}Call`
-
- Function ${_TEXTFUNC_UN}TextCompare${_TEXTFUNC_S}
- Exch $3
- Exch
- Exch $2
- Exch
- Exch 2
- Exch $1
- Exch 2
- Exch 3
- Exch $0
- Exch 3
- Push $4
- Push $5
- Push $6
- Push $7
- Push $8
- Push $9
- ClearErrors
-
- IfFileExists $0 0 error
- IfFileExists $1 0 error
- StrCmp $2 'FastDiff' +5
- StrCmp $2 'FastEqual' +4
- StrCmp $2 'SlowDiff' +3
- StrCmp $2 'SlowEqual' +2
- goto error
-
- FileOpen $4 $0 r
- IfErrors error
- FileOpen $5 $1 r
- IfErrors error
- SetDetailsPrint textonly
-
- StrCpy $6 0
- StrCpy $8 0
-
- nextline:
- StrCmp${_TEXTFUNC_S} $4 '' fast
- IntOp $8 $8 + 1
- FileRead $4 $9
- IfErrors 0 +4
- FileClose $4
- StrCpy $4 ''
- StrCmp${_TEXTFUNC_S} $5 '' end
- StrCmp $2 'FastDiff' fast
- StrCmp $2 'FastEqual' fast slow
-
- fast:
- StrCmp${_TEXTFUNC_S} $5 '' call
- IntOp $6 $6 + 1
- FileRead $5 $7
- IfErrors 0 +5
- FileClose $5
- StrCpy $5 ''
- StrCmp${_TEXTFUNC_S} $4 '' end
- StrCmp $2 'FastDiff' call close
- StrCmp $2 'FastDiff' 0 +2
- StrCmp${_TEXTFUNC_S} $7 $9 nextline call
- StrCmp${_TEXTFUNC_S} $7 $9 call nextline
-
- slow:
- StrCmp${_TEXTFUNC_S} $4 '' close
- StrCpy $6 ''
- DetailPrint '$8. $9'
- FileSeek $5 0
-
- slownext:
- FileRead $5 $7
- IfErrors 0 +2
- StrCmp $2 'SlowDiff' call nextline
- StrCmp $2 'SlowDiff' 0 +2
- StrCmp${_TEXTFUNC_S} $7 $9 nextline slownext
- IntOp $6 $6 + 1
- StrCmp${_TEXTFUNC_S} $7 $9 0 slownext
-
- call:
- Push $2
- Push $3
- Push $4
- Push $5
- Push $6
- Push $7
- Push $8
- Push $9
- Call $3
- Pop $0
- Pop $9
- Pop $8
- Pop $7
- Pop $6
- Pop $5
- Pop $4
- Pop $3
- Pop $2
- StrCmp $0 'StopTextCompare' 0 nextline
-
- close:
- FileClose $4
- FileClose $5
- goto end
-
- error:
- SetErrors
-
- end:
- SetDetailsPrint both
- Pop $9
- Pop $8
- Pop $7
- Pop $6
- Pop $5
- Pop $4
- Pop $3
- Pop $2
- Pop $1
- Pop $0
- FunctionEnd
-
- !verbose pop
- !endif
- !macroend
-
- !macro ConfigRead
- !ifndef ${_TEXTFUNC_UN}ConfigRead${_TEXTFUNC_S}
- !verbose push
- !verbose ${_TEXTFUNC_VERBOSE}
- !define ${_TEXTFUNC_UN}ConfigRead${_TEXTFUNC_S} `!insertmacro ${_TEXTFUNC_UN}ConfigRead${_TEXTFUNC_S}Call`
-
- Function ${_TEXTFUNC_UN}ConfigRead${_TEXTFUNC_S}
- Exch $1
- Exch
- Exch $0
- Exch
- Push $2
- Push $3
- Push $4
- ClearErrors
-
- FileOpen $2 $0 r
- IfErrors error
- StrLen $0 $1
- StrCmp${_TEXTFUNC_S} $0 0 error
-
- readnext:
- FileRead $2 $3
- IfErrors error
- StrCpy $4 $3 $0
- StrCmp${_TEXTFUNC_S} $4 $1 0 readnext
- StrCpy $0 $3 '' $0
- StrCpy $4 $0 1 -1
- StrCmp${_TEXTFUNC_S} $4 '$\r' +2
- StrCmp${_TEXTFUNC_S} $4 '$\n' 0 close
- StrCpy $0 $0 -1
- goto -4
-
- error:
- SetErrors
- StrCpy $0 ''
-
- close:
- FileClose $2
-
- Pop $4
- Pop $3
- Pop $2
- Pop $1
- Exch $0
- FunctionEnd
-
- !verbose pop
- !endif
- !macroend
-
- !macro ConfigWrite
- !ifndef ${_TEXTFUNC_UN}ConfigWrite${_TEXTFUNC_S}
- !verbose push
- !verbose ${_TEXTFUNC_VERBOSE}
- !define ${_TEXTFUNC_UN}ConfigWrite${_TEXTFUNC_S} `!insertmacro ${_TEXTFUNC_UN}ConfigWrite${_TEXTFUNC_S}Call`
-
- Function ${_TEXTFUNC_UN}ConfigWrite${_TEXTFUNC_S}
- Exch $2
- Exch
- Exch $1
- Exch
- Exch 2
- Exch $0
- Exch 2
- Push $3
- Push $4
- Push $5
- Push $6
- ClearErrors
-
- IfFileExists $0 0 error
- FileOpen $3 $0 a
- IfErrors error
-
- StrLen $0 $1
- StrCmp${_TEXTFUNC_S} $0 0 0 readnext
- StrCpy $0 ''
- goto close
-
- readnext:
- FileRead $3 $4
- IfErrors add
- StrCpy $5 $4 $0
- StrCmp${_TEXTFUNC_S} $5 $1 0 readnext
-
- StrCpy $5 0
- IntOp $5 $5 - 1
- StrCpy $6 $4 1 $5
- StrCmp${_TEXTFUNC_S} $6 '$\r' -2
- StrCmp${_TEXTFUNC_S} $6 '$\n' -3
- StrCpy $6 $4
- StrCmp${_TEXTFUNC_S} $5 -1 +3
- IntOp $5 $5 + 1
- StrCpy $6 $4 $5
-
- StrCmp${_TEXTFUNC_S} $2 '' change
- StrCmp${_TEXTFUNC_S} $6 '$1$2' 0 change
- StrCpy $0 SAME
- goto close
-
- change:
- FileSeek $3 0 CUR $5
- StrLen $4 $4
- IntOp $4 $5 - $4
- FileSeek $3 0 END $6
- IntOp $6 $6 - $5
-
- System::Alloc /NOUNLOAD $6
- Pop $0
- FileSeek $3 $5 SET
- System::Call /NOUNLOAD 'kernel32::ReadFile(i r3, i r0, i $6, t.,)'
- FileSeek $3 $4 SET
- StrCmp${_TEXTFUNC_S} $2 '' +2
- FileWrite $3 '$1$2$\r$\n'
- System::Call /NOUNLOAD 'kernel32::WriteFile(i r3, i r0, i $6, t.,)'
- System::Call /NOUNLOAD 'kernel32::SetEndOfFile(i r3)'
- System::Free $0
- StrCmp${_TEXTFUNC_S} $2 '' +3
- StrCpy $0 CHANGED
- goto close
- StrCpy $0 DELETED
- goto close
-
- add:
- StrCmp${_TEXTFUNC_S} $2 '' 0 +3
- StrCpy $0 SAME
- goto close
- FileSeek $3 -1 END
- FileRead $3 $4
- IfErrors +4
- StrCmp${_TEXTFUNC_S} $4 '$\r' +3
- StrCmp${_TEXTFUNC_S} $4 '$\n' +2
- FileWrite $3 '$\r$\n'
- FileWrite $3 '$1$2$\r$\n'
- StrCpy $0 ADDED
-
- close:
- FileClose $3
- goto end
-
- error:
- SetErrors
- StrCpy $0 ''
-
- end:
- Pop $6
- Pop $5
- Pop $4
- Pop $3
- Pop $2
- Pop $1
- Exch $0
- FunctionEnd
-
- !verbose pop
- !endif
- !macroend
-
- !macro FileRecode
- !ifndef ${_TEXTFUNC_UN}FileRecode
- !verbose push
- !verbose ${_TEXTFUNC_VERBOSE}
- !define ${_TEXTFUNC_UN}FileRecode `!insertmacro ${_TEXTFUNC_UN}FileRecodeCall`
-
- Function ${_TEXTFUNC_UN}FileRecode
- Exch $1
- Exch
- Exch $0
- Exch
- Push $2
- Push $3
- Push $4
-
- IfFileExists $0 0 error
- StrCmp $1 OemToChar +2
- StrCmp $1 CharToOem 0 error
-
- FileOpen $2 $0 a
- FileSeek $2 0 END $3
- System::Alloc /NOUNLOAD $3
- Pop $4
- FileSeek $2 0 SET
- System::Call /NOUNLOAD 'kernel32::ReadFile(i r2, i r4, i $3, t.,)'
- System::Call /NOUNLOAD 'user32::$1Buff(i r4, i r4, i $3)'
- FileSeek $2 0 SET
- System::Call /NOUNLOAD 'kernel32::WriteFile(i r2, i r4, i $3, t.,)'
- System::Free $4
- FileClose $2
- goto end
-
- error:
- SetErrors
-
- end:
- Pop $4
- Pop $3
- Pop $2
- Pop $1
- Pop $0
- FunctionEnd
-
- !verbose pop
- !endif
- !macroend
-
- !macro TrimNewLines
- !ifndef ${_TEXTFUNC_UN}TrimNewLines
- !verbose push
- !verbose ${_TEXTFUNC_VERBOSE}
- !define ${_TEXTFUNC_UN}TrimNewLines `!insertmacro ${_TEXTFUNC_UN}TrimNewLinesCall`
-
- Function ${_TEXTFUNC_UN}TrimNewLines
- Exch $0
- Push $1
- Push $2
-
- StrCpy $1 0
- IntOp $1 $1 - 1
- StrCpy $2 $0 1 $1
- StrCmp $2 '$\r' -2
- StrCmp $2 '$\n' -3
- StrCmp $1 -1 +3
- IntOp $1 $1 + 1
- StrCpy $0 $0 $1
-
- Pop $2
- Pop $1
- Exch $0
- FunctionEnd
-
- !verbose pop
- !endif
- !macroend
-
-
- # Uninstall. Case insensitive. #
-
- !macro un.LineFindCall _INPUT _OUTPUT _RANGE _FUNC
- !verbose push
- !verbose ${_TEXTFUNC_VERBOSE}
- Push $0
- Push `${_INPUT}`
- Push `${_OUTPUT}`
- Push `${_RANGE}`
- GetFunctionAddress $0 `${_FUNC}`
- Push `$0`
- Call un.LineFind
- Pop $0
- !verbose pop
- !macroend
-
- !macro un.LineReadCall _FILE _NUMBER _RESULT
- !verbose push
- !verbose ${_TEXTFUNC_VERBOSE}
- Push `${_FILE}`
- Push `${_NUMBER}`
- Call un.LineRead
- Pop ${_RESULT}
- !verbose pop
- !macroend
-
- !macro un.FileReadFromEndCall _FILE _FUNC
- !verbose push
- !verbose ${_TEXTFUNC_VERBOSE}
- Push $0
- Push `${_FILE}`
- GetFunctionAddress $0 `${_FUNC}`
- Push `$0`
- Call un.FileReadFromEnd
- Pop $0
- !verbose pop
- !macroend
-
- !macro un.LineSumCall _FILE _RESULT
- !verbose push
- !verbose ${_TEXTFUNC_VERBOSE}
- Push `${_FILE}`
- Call un.LineSum
- Pop ${_RESULT}
- !verbose pop
- !macroend
-
- !macro un.FileJoinCall _FILE1 _FILE2 _FILE3
- !verbose push
- !verbose ${_TEXTFUNC_VERBOSE}
- Push `${_FILE1}`
- Push `${_FILE2}`
- Push `${_FILE3}`
- Call un.FileJoin
- !verbose pop
- !macroend
-
- !macro un.TextCompareCall _FILE1 _FILE2 _OPTION _FUNC
- !verbose push
- !verbose ${_TEXTFUNC_VERBOSE}
- Push $0
- Push `${_FILE1}`
- Push `${_FILE2}`
- Push `${_OPTION}`
- GetFunctionAddress $0 `${_FUNC}`
- Push `$0`
- Call un.TextCompare
- Pop $0
- !verbose pop
- !macroend
-
- !macro un.ConfigReadCall _FILE _ENTRY _RESULT
- !verbose push
- !verbose ${_TEXTFUNC_VERBOSE}
- Push `${_FILE}`
- Push `${_ENTRY}`
- Call un.ConfigRead
- Pop ${_RESULT}
- !verbose pop
- !macroend
-
- !macro un.ConfigWriteCall _FILE _ENTRY _VALUE _RESULT
- !verbose push
- !verbose ${_TEXTFUNC_VERBOSE}
- Push `${_FILE}`
- Push `${_ENTRY}`
- Push `${_VALUE}`
- Call un.ConfigWrite
- Pop ${_RESULT}
- !verbose pop
- !macroend
-
- !macro un.FileRecodeCall _FILE _FORMAT
- !verbose push
- !verbose ${_TEXTFUNC_VERBOSE}
- Push `${_FILE}`
- Push `${_FORMAT}`
- Call un.FileRecode
- !verbose pop
- !macroend
-
- !macro un.TrimNewLinesCall _FILE _RESULT
- !verbose push
- !verbose ${_TEXTFUNC_VERBOSE}
- Push `${_FILE}`
- Call un.TrimNewLines
- Pop ${_RESULT}
- !verbose pop
- !macroend
-
- !macro un.LineFind
- !ifndef un.LineFind
- !verbose push
- !verbose ${_TEXTFUNC_VERBOSE}
- !undef _TEXTFUNC_UN
- !define _TEXTFUNC_UN `un.`
-
- !insertmacro LineFind
-
- !undef _TEXTFUNC_UN
- !define _TEXTFUNC_UN
- !verbose pop
- !endif
- !macroend
-
- !macro un.LineRead
- !ifndef un.LineRead
- !verbose push
- !verbose ${_TEXTFUNC_VERBOSE}
- !undef _TEXTFUNC_UN
- !define _TEXTFUNC_UN `un.`
-
- !insertmacro LineRead
-
- !undef _TEXTFUNC_UN
- !define _TEXTFUNC_UN
- !verbose pop
- !endif
- !macroend
-
- !macro un.FileReadFromEnd
- !ifndef un.FileReadFromEnd
- !verbose push
- !verbose ${_TEXTFUNC_VERBOSE}
- !undef _TEXTFUNC_UN
- !define _TEXTFUNC_UN `un.`
-
- !insertmacro FileReadFromEnd
-
- !undef _TEXTFUNC_UN
- !define _TEXTFUNC_UN
- !verbose pop
- !endif
- !macroend
-
- !macro un.LineSum
- !ifndef un.LineSum
- !verbose push
- !verbose ${_TEXTFUNC_VERBOSE}
- !undef _TEXTFUNC_UN
- !define _TEXTFUNC_UN `un.`
-
- !insertmacro LineSum
-
- !undef _TEXTFUNC_UN
- !define _TEXTFUNC_UN
- !verbose pop
- !endif
- !macroend
-
- !macro un.FileJoin
- !ifndef un.FileJoin
- !verbose push
- !verbose ${_TEXTFUNC_VERBOSE}
- !undef _TEXTFUNC_UN
- !define _TEXTFUNC_UN `un.`
-
- !insertmacro FileJoin
-
- !undef _TEXTFUNC_UN
- !define _TEXTFUNC_UN
- !verbose pop
- !endif
- !macroend
-
- !macro un.TextCompare
- !ifndef un.TextCompare
- !verbose push
- !verbose ${_TEXTFUNC_VERBOSE}
- !undef _TEXTFUNC_UN
- !define _TEXTFUNC_UN `un.`
-
- !insertmacro TextCompare
-
- !undef _TEXTFUNC_UN
- !define _TEXTFUNC_UN
- !verbose pop
- !endif
- !macroend
-
- !macro un.ConfigRead
- !ifndef un.ConfigRead
- !verbose push
- !verbose ${_TEXTFUNC_VERBOSE}
- !undef _TEXTFUNC_UN
- !define _TEXTFUNC_UN `un.`
-
- !insertmacro ConfigRead
-
- !undef _TEXTFUNC_UN
- !define _TEXTFUNC_UN
- !verbose pop
- !endif
- !macroend
-
- !macro un.ConfigWrite
- !ifndef un.ConfigWrite
- !verbose push
- !verbose ${_TEXTFUNC_VERBOSE}
- !undef _TEXTFUNC_UN
- !define _TEXTFUNC_UN `un.`
-
- !insertmacro ConfigWrite
-
- !undef _TEXTFUNC_UN
- !define _TEXTFUNC_UN
- !verbose pop
- !endif
- !macroend
-
- !macro un.FileRecode
- !ifndef un.FileRecode
- !verbose push
- !verbose ${_TEXTFUNC_VERBOSE}
- !undef _TEXTFUNC_UN
- !define _TEXTFUNC_UN `un.`
-
- !insertmacro FileRecode
-
- !undef _TEXTFUNC_UN
- !define _TEXTFUNC_UN
- !verbose pop
- !endif
- !macroend
-
- !macro un.TrimNewLines
- !ifndef un.TrimNewLines
- !verbose push
- !verbose ${_TEXTFUNC_VERBOSE}
- !undef _TEXTFUNC_UN
- !define _TEXTFUNC_UN `un.`
-
- !insertmacro TrimNewLines
-
- !undef _TEXTFUNC_UN
- !define _TEXTFUNC_UN
- !verbose pop
- !endif
- !macroend
-
-
- # Install. Case sensitive. #
-
- !macro TextCompareSCall _FILE1 _FILE2 _OPTION _FUNC
- !verbose push
- !verbose ${_TEXTFUNC_VERBOSE}
- Push $0
- Push `${_FILE1}`
- Push `${_FILE2}`
- Push `${_OPTION}`
- GetFunctionAddress $0 `${_FUNC}`
- Push `$0`
- Call TextCompareS
- Pop $0
- !verbose pop
- !macroend
-
- !macro ConfigReadSCall _FILE _ENTRY _RESULT
- !verbose push
- !verbose ${_TEXTFUNC_VERBOSE}
- Push `${_FILE}`
- Push `${_ENTRY}`
- Call ConfigReadS
- Pop ${_RESULT}
- !verbose pop
- !macroend
-
- !macro ConfigWriteSCall _FILE _ENTRY _VALUE _RESULT
- !verbose push
- !verbose ${_TEXTFUNC_VERBOSE}
- Push `${_FILE}`
- Push `${_ENTRY}`
- Push `${_VALUE}`
- Call ConfigWriteS
- Pop ${_RESULT}
- !verbose pop
- !macroend
-
- !macro TextCompareS
- !ifndef TextCompareS
- !verbose push
- !verbose ${_TEXTFUNC_VERBOSE}
- !undef _TEXTFUNC_S
- !define _TEXTFUNC_S `S`
-
- !insertmacro TextCompare
-
- !undef _TEXTFUNC_S
- !define _TEXTFUNC_S
- !verbose pop
- !endif
- !macroend
-
- !macro ConfigReadS
- !ifndef ConfigReadS
- !verbose push
- !verbose ${_TEXTFUNC_VERBOSE}
- !undef _TEXTFUNC_S
- !define _TEXTFUNC_S `S`
-
- !insertmacro ConfigRead
-
- !undef _TEXTFUNC_S
- !define _TEXTFUNC_S
- !verbose pop
- !endif
- !macroend
-
- !macro ConfigWriteS
- !ifndef ConfigWriteS
- !verbose push
- !verbose ${_TEXTFUNC_VERBOSE}
- !undef _TEXTFUNC_S
- !define _TEXTFUNC_S `S`
-
- !insertmacro ConfigWrite
-
- !undef _TEXTFUNC_S
- !define _TEXTFUNC_S
- !verbose pop
- !endif
- !macroend
-
-
- # Uninstall. Case sensitive. #
-
- !macro un.TextCompareSCall _FILE1 _FILE2 _OPTION _FUNC
- !verbose push
- !verbose ${_TEXTFUNC_VERBOSE}
- Push $0
- Push `${_FILE1}`
- Push `${_FILE2}`
- Push `${_OPTION}`
- GetFunctionAddress $0 `${_FUNC}`
- Push `$0`
- Call un.TextCompareS
- Pop $0
- !verbose pop
- !macroend
-
- !macro un.ConfigReadSCall _FILE _ENTRY _RESULT
- !verbose push
- !verbose ${_TEXTFUNC_VERBOSE}
- Push `${_FILE}`
- Push `${_ENTRY}`
- Call un.ConfigReadS
- Pop ${_RESULT}
- !verbose pop
- !macroend
-
- !macro un.ConfigWriteSCall _FILE _ENTRY _VALUE _RESULT
- !verbose push
- !verbose ${_TEXTFUNC_VERBOSE}
- Push `${_FILE}`
- Push `${_ENTRY}`
- Push `${_VALUE}`
- Call un.ConfigWriteS
- Pop ${_RESULT}
- !verbose pop
- !macroend
-
- !macro un.TextCompareS
- !ifndef un.TextCompareS
- !verbose push
- !verbose ${_TEXTFUNC_VERBOSE}
- !undef _TEXTFUNC_UN
- !define _TEXTFUNC_UN `un.`
- !undef _TEXTFUNC_S
- !define _TEXTFUNC_S `S`
-
- !insertmacro TextCompare
-
- !undef _TEXTFUNC_UN
- !define _TEXTFUNC_UN
- !undef _TEXTFUNC_S
- !define _TEXTFUNC_S
- !verbose pop
- !endif
- !macroend
-
- !macro un.ConfigReadS
- !ifndef un.ConfigReadS
- !verbose push
- !verbose ${_TEXTFUNC_VERBOSE}
- !undef _TEXTFUNC_UN
- !define _TEXTFUNC_UN `un.`
- !undef _TEXTFUNC_S
- !define _TEXTFUNC_S `S`
-
- !insertmacro ConfigRead
-
- !undef _TEXTFUNC_UN
- !define _TEXTFUNC_UN
- !undef _TEXTFUNC_S
- !define _TEXTFUNC_S
- !verbose pop
- !endif
- !macroend
-
- !macro un.ConfigWriteS
- !ifndef un.ConfigWriteS
- !verbose push
- !verbose ${_TEXTFUNC_VERBOSE}
- !undef _TEXTFUNC_UN
- !define _TEXTFUNC_UN `un.`
- !undef _TEXTFUNC_S
- !define _TEXTFUNC_S `S`
-
- !insertmacro ConfigWrite
-
- !undef _TEXTFUNC_UN
- !define _TEXTFUNC_UN
- !undef _TEXTFUNC_S
- !define _TEXTFUNC_S
- !verbose pop
- !endif
- !macroend
-
- !endif
-